using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.ComponentModel;


namespace produccion.clases
{

   public class CLSCONCEP : ObservableObject
    {

MDOgeneral mod = new MDOgeneral();

#region Metodos basicos tabla

public CLSCONCEP consultar()
{
    try
    {
        string query = "select TIPO_CPT,CODCPT_CPT,NOMCPT_CPT,TIPREP_CPT,TIPNOV_CPT,AFEBAS_CPT  from CONCEP where CODCPT_CPT='"+CODCPT_CPT+"'";
        DataTable dt = mod.consulta(query);
        foreach (DataRow r in dt.Rows)
        {
                NOMCPT_CPT = r["NOMCPT_CPT"].ToString();
                TIPREP_CPT = r["TIPREP_CPT"].ToString();
                TIPNOV_CPT = r["TIPNOV_CPT"].ToString();
                AFEBAS_CPT = r["AFEBAS_CPT"].ToString();
                TIPO_CPT = r["TIPO_CPT"].ToString();
         
        }
        return this;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

public List<CLSCONCEP> listarConceptos()
{
    try
    {
        string query = "select TIPO_CPT,CODCPT_CPT,NOMCPT_CPT,TIPREP_CPT,TIPNOV_CPT,AFEBAS_CPT  from CONCEP ";
        DataTable dt = mod.consulta(query);
        List<CLSCONCEP> lista = new List<CLSCONCEP>();

        foreach (DataRow r in dt.Rows)
        {
            lista.Add(new CLSCONCEP
            {
                CODCPT_CPT = r["CODCPT_CPT"].ToString(),
                NOMCPT_CPT = r["NOMCPT_CPT"].ToString(),
                TIPREP_CPT = r["TIPREP_CPT"].ToString(),
                TIPNOV_CPT = r["TIPNOV_CPT"].ToString(),
                AFEBAS_CPT = r["AFEBAS_CPT"].ToString(),
                TIPO_CPT = r["TIPO_CPT"].ToString()
            });
        }

        return lista;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
    
    public DataTable listaConcep()
    {   
        try
        {
            string query = "select TIPO_CPT,CODCPT_CPT,NOMCPT_CPT,TIPREP_CPT,TIPNOV_CPT,AFEBAS_CPT  from CONCEP where TIPO_CPT='" + TIPO_CPT + "' ORDER BY NOMCPT_CPT";
            return mod.consulta(query);
        }
        catch (Exception e) { throw e; }
    }


    public int insertar()
    {
        try
        {
            string query = "insert into CONCEP (TIPO_CPT,CODCPT_CPT,NOMCPT_CPT,TIPREP_CPT,TIPNOV_CPT,AFEBAS_CPT) values ('" + TIPO_CPT + "','" + CODCPT_CPT + "','" + NOMCPT_CPT + "','" + TIPREP_CPT + "','" + TIPNOV_CPT + "','" + AFEBAS_CPT + "')";
            return mod.comando(query);
        }
        catch (Exception e) { throw e; }
    }
    public int eliminar()
    {
        try
        {
            string query = "delete from CONCEP where TIPO_CPT='" + TIPO_CPT + "' and CODCPT_CPT='" + CODCPT_CPT + "' and CODCPT_CPT not in (select distinct codcpt_nvp from NOVPRD where length(trim(codcpt_nvp))=3)";
            return mod.comando(query);
        }
        catch (Exception e) { throw e; }
    }
    public int actualizar()
    {
        try
        {
            string query = "update CONCEP set NOMCPT_CPT='"+NOMCPT_CPT+"',TIPREP_CPT='"+TIPREP_CPT+"',TIPNOV_CPT='"+_TIPNOV_CPT+"',AFEBAS_CPT='"+AFEBAS_CPT+"' where  TIPO_CPT='"+TIPO_CPT+"' and CODCPT_CPT='"+CODCPT_CPT+"'";
            return mod.comando(query);
        }
        catch (Exception e) { throw e; }
    }
    public int guardar(List<CLSCONCEP> add, List<CLSCONCEP> del, List<CLSCONCEP> upd)
    {
        try
        {
            MDOgeneral.transaccion = MDOgeneral.conexion.BeginTransaction();

            for (int i = 0; i <= add.Count - 1; i++) {
                if (!add[i].CODCPT_CPT.Equals("") && !add[i].NOMCPT_CPT.Equals(""))
                {
                    if (add[i].existe())
                    {
                        add[i].actualizar();
                    }
                    else {
                        add[i].insertar();
                    }
                }
            }

            for (int i = 0; i <= del.Count - 1; i++)
            {
                del[i].eliminar();
            }

            for (int i = 0; i <= upd.Count - 1; i++)
            {
                if (!upd[i].NOMCPT_CPT.Equals(""))
                {
                    upd[i].actualizar();

                }
            }

            MDOgeneral.transaccion.Commit();
            return 1;
        }
        catch (Exception ex) {

            MDOgeneral.transaccion.Rollback();
            throw (ex);
        }
       
    }
    public Boolean existe() 
    {
        try
        {
            string query = "select count(TIPO_CPT) from CONCEP where TIPO_CPT='" + TIPO_CPT + "' and CODCPT_CPT='" + CODCPT_CPT + "'";
            DataTable val = mod.consulta(query);
            if (val.Rows[0][0].ToString().Equals("0"))
                return false;
            else
                return true;
        } catch (Exception e) { throw e; }
    }

#endregion

#region  Propiedades
       
    private string _TIPO_CPT;
    public string TIPO_CPT
    {
        get { return _TIPO_CPT; }
        set
        {
            _TIPO_CPT = value;
            RaisePropertyChangedEvent("TIPO_CPT");
        }
    }

    private string _CODCPT_CPT;
    public string CODCPT_CPT
    {
        get { return _CODCPT_CPT; }
        set
        {
            _CODCPT_CPT = value;
            RaisePropertyChangedEvent("CODCPT_CPT");
        }
    }

    private string _NOMCPT_CPT;
    public string NOMCPT_CPT
    {
        get { return _NOMCPT_CPT; }
        set
        {
              if (_NOMCPT_CPT != value) { CAMBIO = true; }
            _NOMCPT_CPT = value;
            RaisePropertyChangedEvent("NOMCPT_CPT");
        }
    }
       
    private string _TIPREP_CPT;
    public string TIPREP_CPT
    {
        get { return _TIPREP_CPT; }
        set
        {
             if (_TIPREP_CPT != value) { CAMBIO = true; }
            _TIPREP_CPT = value;
            RaisePropertyChangedEvent("TIPREP_CPT");
        }
    }

    private string _TIPNOV_CPT="F";
    public string TIPNOV_CPT
    {
        get { return _TIPNOV_CPT; }
        set
        {
             if (_TIPNOV_CPT != value) { CAMBIO = true; }
            _TIPNOV_CPT = value;
            RaisePropertyChangedEvent("TIPNOV_CPT");
        }
    }
    
    private string _AFEBAS_CPT;
    public string AFEBAS_CPT
    {
        get { return _AFEBAS_CPT; }
        set
        {
             if (_AFEBAS_CPT != value) { CAMBIO = true; }
            _AFEBAS_CPT = value;
            RaisePropertyChangedEvent("AFEBAS_CPT");
        }
    }

    private Boolean _CAMBIO = false;
    public Boolean CAMBIO
    {
        get { return _CAMBIO; }
        set
        {
            _CAMBIO = value;
            RaisePropertyChangedEvent("CAMBIO");
        }
    }

    private Boolean _EXISTE = false;
    public Boolean EXISTE
    {
        get { return _EXISTE; }
        set
        {
            _EXISTE = value;
            RaisePropertyChangedEvent("EXISTE");
        }
    }

#endregion

      }
}
